package com.jluzh.server;

import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.core.*;

/**
 * @author EvanHuang
 * @date 11/5/2018 9:59 AM
 * @since
 */
@Path("inject")
public class JerseyInject {
    /**
     * 使用@Context获取请求上下文内容
     *
     * @param ui
     * @return
     */
    @GET
    @Path("/formui")
    public String formPojoParam(@Context UriInfo ui) {

        //获取资源路径：inject/formui
        System.out.println(ui.getPath());
        //获取完整请求路径：http://localhost:8081/resources/inject/formui
        System.out.println(ui.getAbsolutePath());
        //获取请求根路径：http://localhost:8081/resources/
        System.out.println(ui.getBaseUri());
        //获取匹配请求的资源类[com.jluzh.server.JerseyInject@7c6165f8]
        System.out.println(ui.getMatchedResources());
        //获取尝试匹配的资源路径[inject/formui, inject]
        System.out.println(ui.getMatchedURIs());
        //获取完整请求URI http://localhost:8081/resources/inject/formui?name=haha
        System.out.println(ui.getRequestUri());
        //获取请求参数列表{name=[haha]}，类型为MultivaluedMap<String, String>
        System.out.println(ui.getQueryParameters());
        //获取路径参数列表{}
        System.out.println(ui.getPathParameters());
        return "success";
    }

    /**
     * 通过@Context获取请求头信息
     *
     * @param headers
     * @return
     */
    @GET
    @Path("/headps")
    public String headps(@Context HttpHeaders headers) {

        //获取请求头中的指定值dfse-34fd-1ggd-34pe
        System.out.println(headers.getHeaderString("token"));
        //获取接受的语言[*]
        System.out.println(headers.getAcceptableLanguages());
        //获取接受的MIME类型[application/xml]
        System.out.println(headers.getAcceptableMediaTypes());
        //获取cookie信息
        System.out.println(headers.getCookies());
        //获取请求头中的指定值[dfse-34fd-1ggd-34pe]
        System.out.println(headers.getRequestHeader("token"));
        //获取请求头所有信息
        //{content-type=[application/x-www-form-urlencoded], accept=[application/xml], token=[dfse-34fd-1ggd-34pe], cache-control=[no-cache],
        System.out.println(headers.getRequestHeaders());

        return "success";
    }

    /**
     * 通过@Context获取请求信息
     *但是注意，在JAX-RS中，这个Request对象并不代表的是请求对象本身，他是一个有关请求处理的辅助类，
     * 这个类主要的作用是用来做请求的预处理相关内容。那如果要真正获取请求，继续向下看。
     * @param headers
     * @return
     */
    @GET
    @Path("/request")
    public String request(@Context Request request) {
        System.out.println(request);
        return "success";
    }

    /**
     * 在Servlet环境下使用@Context注入Servlet对象
     * @param ctx
     * @param req
     * @param resp
     * @return
     */
    @GET
    @Path("/servlet")
    public String servlet(@Context ServletContext ctx,
                          @Context HttpServletRequest req, @Context HttpServletResponse resp){
        System.out.println(ctx);
        System.out.println(req);
        System.out.println(resp);
        return "success";
    }


}
